#include <REGX52.H> 

/**
 * 菜单控制LED
 * 1. 正向流水灯
 * 2. 反向流水灯
 * 3. 正向计时功能
 * 4. 倒计时功能
 *
 * 功能模式按键，菜单前进按键，菜单后退按键
 */

// 定义LED连接的端口
#define LED_PORT P2

// 定义按键连接的端口
sbit KEY_MODE = P3^0;  // 功能模式按键
sbit KEY_UP   = P3^1;  // 菜单前进按键
sbit KEY_DOWN = P3^2;  // 菜单后退按键
unsigned char key;
// 延时函数
void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 123; j++);
}

// LED初始化
void led_init() {
    LED_PORT = 0xFF;  // 初始化为高电平，关闭所有LED
}

// 按键检测函数
unsigned char get_key() {
    if (KEY_MODE == 0) {
        delay(10);  // 消抖
        if (KEY_MODE == 0) {
            while (KEY_MODE == 0);
            return 1;  // 功能模式按键按下
        }
    }
    if (KEY_UP == 0) {
        delay(10);
        if (KEY_UP == 0) {
            while (KEY_UP == 0);
            return 2;  // 菜单前进按键按下
        }
    }
    if (KEY_DOWN == 0) {
        delay(10);
        if (KEY_DOWN == 0) {
            while (KEY_DOWN == 0);
            return 3;  // 菜单后退按键按下
        }
    }
    return 0;  // 无按键按下
}

// 正向流水灯函数
void forward_flow() {
    unsigned char i;
    while(1){
    for (i = 0; i < 8; i++) {
        LED_PORT = ~(0x80 >> i);
        delay(100);
        if (KEY_MODE == 0)
        break;
    }
    LED_PORT = 0xFF;  // 关闭所有LED
    if (KEY_MODE == 0)
    break;
}
}
// 反向流水灯函数
void backward_flow() {
    unsigned char i;
    while(1){
    for (i = 0; i < 8; i++) {
        LED_PORT = ~(0x01 << i);
        delay(100);
        if (KEY_MODE == 0)
        break;
    }
    LED_PORT = 0xFF;  // 关闭所有LED
    if (KEY_MODE == 0)
    break;
}
}

// 正向计时函数（1-8秒）
void forward_count() {
    unsigned char i;
    for (i = 1; i <= 8; i++) {
        LED_PORT = ~i;
        delay(1000);  // 1秒延时
        if (KEY_MODE == 0)
        break;
    }

    LED_PORT = 0xFF;  // 关闭所有LED

}

// 倒计时函数（8-1秒）
void countdown() {
    char i;
    for (i = 8; i >= 1; i--) {
        LED_PORT = ~i;
        delay(1000);  // 1秒延时
        if (KEY_MODE == 0)
        break;
    }

    LED_PORT = 0xFF;  // 关闭所有LED

}

void main()
{
    unsigned char menu_item = 1;  // 当前菜单项
    
    led_init();
    
    while (1)
    {
        // 显示当前菜单项（通过LED闪烁指示）
        switch(menu_item) {
            case 1: LED_PORT = 0xFE; break;  // 第一个LED亮
            case 2: LED_PORT = 0xFD; break;  // 第二个LED亮
            case 3: LED_PORT = 0xFB; break;  // 第三个LED亮
            case 4: LED_PORT = 0xF7; break;  // 第四个LED亮
        }
        
        // 检测按键
        key = get_key();
        if (key == 1) {
            // 功能模式按键 - 进入当前菜单项的功能
            switch(menu_item) {
                case 1:  // 正向流水灯
                    forward_flow();
                    break;
                case 2:  // 反向流水灯
                    backward_flow();
                    break;
                case 3:  // 正向计时功能
                    forward_count();
                    break;
                case 4:  // 倒计时功能
                    countdown();
                    break;
            }
            delay(200);
        } else if (key == 2) {
            // 菜单前进按键
            menu_item++;
            if (menu_item > 4) menu_item = 1;
          
        } else if (key == 3) {
            // 菜单后退按键
            menu_item--;
            if (menu_item < 1) menu_item = 4;
           
        }
        
        // 主循环延时，避免CPU占用过高
        delay(100);
    }
}